{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.widgets import TextBox"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "64d4a0edb7de407eb2d06bb93417d826",
       "version_major": 2,
       "version_minor": 0
      },
      "image/png": "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d7876888o6SkRIMHD9aIESN8ag0bNjzn9wJwlwMHDignJ0clJSU6ePDgRf+FFQCCVdVzFTt27KjExES98sorWrNmjXr16qXw8HBJ0g8//KAvvvhCCxYsUKdOnSRJmzZtOucvq1u3rvLz81VQUKDIyEhJ8tkj8MMPP1S/fv101113STJrAg8cOFDmNeHh4SouLi5zrG3bttq9e/dZwywASOYvncOGDdPdd9+tq666SsOGDdOWLVtUr149f7cGAI4JKywsVE5OTpnH0aNHJUkej0e9e/fW/PnzlZmZqT/84Q+l31i7dm1ddtllSk9P1969e/Xee+9p1KhR5/xl7du3V40aNfTII49o7969Wrp0qZYsWVLmNU2aNNGKFSu0c+dOffrpp+rdu7fPRSWNGjXSxo0bdejQodJex4wZo48//ljDhg3Tzp079fXXX2vVqlUaPnx4BZwmAKFi4cKFysvL09SpUzVy5EhdffXVGjZsmL/bAgBHha1du1b169cv87jhhhtKX3Dfffdpz549+tWvfqXrr7/+398YFqbly5dr+/btSkpK0kMPPaRp06ad85fVqVNHL730kt5++221bNlSy5Yt08SJE8u8ZubMmapdu7Y6duyonj17qnv37mrbtm2Z1zzxxBM6cOCArrzyStWtW1eS1KpVK23YsEFff/21OnXqpDZt2ujPf/6z6tevf4mnCEAo+etf/6r09HRFR0crLCxM6enp2rJli55//nl/twYAjvFY5RfluUheXp5iYmL03XfflV7ZDCA07dy5U507d9bGjRvVunVrf7cDwI/y8vLUoEED5ebmuvb9v1LvBQwAAIDAQwAEAABwGQIgAFeIj4/X2LFjy2wgDwBuxRpA1gACAOAqrAFkAggAAOA6BEAAAACXIQACAAC4DAEQAADAZQiAAAAALkMABAAAcBkCIAAAgMsQAAEAAFymqr8b8Kcze2Dn5+f7uRMAAOCUM+/7Lr4XhrsD4Jn/AJo1a+bnTgAAgNPy8/MVExPj7zb8wtW3gispKVF2draioqLk8Xj83Q4AAHCAZVnKz89XQkKCwsLcuRrO1QEQAADAjdwZewEAAFyMAAgAAOAyBEAAAACXIQACAAC4DAEQAADAZQiAAAAALkMABAAAcBkCIAAAgMsQAAEAAFyGAAgAAOAyBEAAAACXIQACAAC4DAEQAADAZQiAAAAALkMABAAAcBkCIAAAgMsQAAEAAFyGAAgAAOAyBEAAAACXIQACAAC4DAEQAADAZf4/omWQL+H5x7kAAAAASUVORK5CYII=",
      "text/html": [
       "\n",
       "            <div style=\"display: inline-block;\">\n",
       "                <div class=\"jupyter-widgets widget-label\" style=\"text-align: center;\">\n",
       "                    Figure\n",
       "                </div>\n",
       "                <img src='' width=640.0/>\n",
       "            </div>\n",
       "        "
      ],
      "text/plain": [
       "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib widget\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "fig.subplots_adjust(bottom=0.2)\n",
    "\n",
    "x = np.arange(-25.0, 25.0, 0.001)\n",
    "l, = ax.plot(x, np.zeros_like(x), color='red', lw=3)\n",
    "\n",
    "def submit(expression):\n",
    "    \"\"\"\n",
    "    Update the plotted function to the new math *expression*.\n",
    "    \"\"\"\n",
    "    ydata = eval(expression)\n",
    "    l.set_ydata(ydata)\n",
    "    ax.relim()\n",
    "    ax.autoscale_view()\n",
    "    plt.draw()\n",
    "\n",
    "axbox = fig.add_axes([0.1, 0.05, 0.8, 0.075])\n",
    "text_box = TextBox(axbox, \"Evaluate\", textalignment=\"center\")\n",
    "text_box.on_submit(submit)\n",
    "text_box.set_val(\"x\")  # Trigger `submit` with the initial string.\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "env_twitter",
   "language": "python",
   "name": "env_twitter"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
